from abc import ABCMeta, abstractmethod

class Employee(metaclass=ABCMeta):  # 抽象类不能实例化，但是子类可以继承
    '''继承抽象类'''
    def __init__(self, name):
        self.name = name
    # 将这个方法变成抽象方法，对象不能直接调用，但是子类可以重写这个方法
    @abstractmethod
    def give_salary(self):
        pass
class Magnaer(Employee):
    '''创建一个部门经理类'''
    def give_salary(self):
        return 15000.00

class Programmer(Employee):
    '''创建一个程序员类，添加一个工作时间属性'''
    def __init__(self, name, work_hour=0):
        super(Programmer, self).__init__(name)
        self.work_hour = work_hour

    def give_salary(self):
        return self.work_hour * 200

class SalesMan(Employee):
    '''创建一个销售员类，添加一个销售额属性'''
    def __init__(self, name, sales=0):
        super(SalesMan, self).__init__(name)
        self.sales = sales

    def give_salary(self):
        return self.sales * 0.05 + 1800

if __name__ == '__main__':
    emps = [Magnaer('张三'), Programmer('李四'), Programmer('王五'), Programmer('赵二'), SalesMan('朱六'),
            SalesMan('王大锤')]
    for emp in emps:
        if isinstance(emp, Programmer):
            emp.work_hour = float(input(f'请输入{emp.name}工作时长：'))
        elif isinstance(emp, SalesMan):
            emp.sales = float(input(f'请输入{emp.name}的销售额：'))
        print(f'{emp.name}的本月月薪为￥{emp.give_salary()} ')